// 网络 net
const net = require('net');
// OSI 七层模型    应用 表示 会话 传输 网络 数据链路 物理
// TCP/IP 四层模型    应用 传输 网络 网络连接主机
// net模块是Node.js中网络功能的封装，使用net模块可以方便地创建基于TCP或IP的网络应用。
// 服务端之间的通讯可以直接使用TCP通讯
/*
server.js
    import net from 'net';  // 需要将 type 改成 module

    const server = net.createServer((socket) => {  // 参数是 socket套接字
        socket.write('hello\r\n');
        // 这里也可以结束信息
        socket.on('data', (data) => {     // 这里监听客户端返回的数据
            console.log(data.toString());  //  world
        }
    });

    server.listen(3000, () => {
        console.log('server bound');
    })

client.js
    import net from 'net';  // 需要将 type 改成 module

    const client = net.createConnection({ host: '127.0.0.1', port: 3000 }, () => {     // 这里连接同为服务端的另一个服务
        console.log('connected to server!');
    })

    client.on('data', (data) => {     // 这里监听服务端返回的数据
        console.log(data.toString());  // hello
        // client.end();   // 这里结束连接
    })

    // 也可以写数据, 上面就不要结束连接了
    client.write('world\r\n');
*/
// 实现 http协议
/*
    import net from 'net';

    // 准备一段响应信息
    const responseHeader = [
        'HTTP/1.1 200 OK',
        'Content-Type: text/plain',
        'Content-Length: 12',
        '\r\n',    // 这里要换行
        'hello world!',
    ]
    const html = '<div>hello world!</div>'
    const responseHeaders = [
        'HTTP/1.1 200 OK',
        'Content-Type: text/html', 
        'Content-Length: ' + html.length,
        '\r\n',    // 这里要换行
        html,
    ]

    const server = net.createServer((socket) => {
        socket.on('data', (e) => {
            console.log(e.toString());  // 打印出浏览器传过来的头部信息
            // 当这里返回数据时，浏览器才能访问到，否则会一直等待
            if(/GET/.test(e.toString()) {  // 是否包含 get请求
                socket.write(responseHeaders.join('\r\n'));  // 这里返回响应信息, 这样就可以当成 http 响应了
            }
        })
    })
    server.listen(80, () => {
        console.log('当浏览器访问 http://localhost时，会将头部所有信息都传过来');
    }

    
*/

// 基于 websocket 的第三方库 socket.io ，去实现聊天室



// serverless 云函数
// Faas (函数即服务) 和 Baas
// serverless 无服务开发
// 安装 npm install @serverless-devs/s -g  配合阿里云的serverless